From 012c9e9cf9db9147cd95e1abb0f8db0548e0a9d9 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 6 Sep 2006 19:02:39 +0000 Subject: r18189: When tearing down a connection we can be harsher 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 | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index 85b1d5d6cd..76c0c48232 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -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; iname, @@ -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; } -- cgit