[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Tue Jul 29 15:32:04 MDT 2014


The branch, master has been updated
       via  f958867 s3: winbindd: On new client connect, prune idle or hung connections older than "winbind request timeout"
       via  2535803 s3: winbindd: Add new parameter "winbind request timeout" set to 60 seconds with man page.
      from  6d10418 tests: dnsserver: Add a update test with name set to '.'

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit f9588675ea3cb2f1fabd07a4ea8b2138d65aee83
Author: Jeremy Allison <jra at samba.org>
Date:   Fri Jul 25 12:46:46 2014 -0700

    s3: winbindd: On new client connect, prune idle or hung connections older than "winbind request timeout"
    
    Bug 3204 winbindd: Exceeding 200 client connections, no idle connection found
    
    https://bugzilla.samba.org/show_bug.cgi?id=3204
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ira Cooper <ira at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Tue Jul 29 23:31:14 CEST 2014 on sn-devel-104

commit 2535803627687f390cae6a95e88f70ff4d6cc67a
Author: Jeremy Allison <jra at samba.org>
Date:   Fri Jul 25 12:44:53 2014 -0700

    s3: winbindd: Add new parameter "winbind request timeout" set to 60 seconds with man page.
    
    "This parameter specifies the number of seconds the winbindd
    daemon will wait before disconnecting either a client connection
    with no outstanding requests (idle) or a client connection with a
    request that has remained outstanding (hung) for longer than this
    number of seconds."
    
    Bug 3204 winbindd: Exceeding 200 client connections, no idle connection found
    
    https://bugzilla.samba.org/show_bug.cgi?id=3204
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ira Cooper <ira at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 .../smbdotconf/winbind/winbindrequesttimeout.xml   |   16 +++++++++
 lib/param/loadparm.c                               |    2 +
 lib/param/param_table.c                            |    9 +++++
 source3/param/loadparm.c                           |    1 +
 source3/winbindd/winbindd.c                        |   36 ++++++++++++++++++++
 5 files changed, 64 insertions(+), 0 deletions(-)
 create mode 100644 docs-xml/smbdotconf/winbind/winbindrequesttimeout.xml


Changeset truncated at 500 lines:

diff --git a/docs-xml/smbdotconf/winbind/winbindrequesttimeout.xml b/docs-xml/smbdotconf/winbind/winbindrequesttimeout.xml
new file mode 100644
index 0000000..3220871
--- /dev/null
+++ b/docs-xml/smbdotconf/winbind/winbindrequesttimeout.xml
@@ -0,0 +1,16 @@
+<samba:parameter name="winbind request timeout"
+                 context="G"
+				 type="integer"
+                 advanced="1" developer="1"
+                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
+<description>
+	<para>This parameter specifies the number of
+	seconds the <citerefentry><refentrytitle>winbindd</refentrytitle>
+	<manvolnum>8</manvolnum></citerefentry> daemon will wait before
+	disconnecting either a client connection with no outstanding
+	requests (idle) or a client connection with a request that has
+	remained outstanding (hung) for longer than this number of seconds.</para>
+</description>
+
+<value type="default">60</value>
+</samba:parameter>
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index b58a058..bc96dc3 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -2509,6 +2509,8 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
 
 	lpcfg_do_global_parameter(lp_ctx, "winbind reconnect delay", "30");
 
+	lpcfg_do_global_parameter(lp_ctx, "winbind request timeout", "60");
+
 	lpcfg_do_global_parameter(lp_ctx, "nt acl support", "yes");
 
 	lpcfg_do_global_parameter(lp_ctx, "acl check permissions", "yes");
diff --git a/lib/param/param_table.c b/lib/param/param_table.c
index 79b9489..d3f60c3 100644
--- a/lib/param/param_table.c
+++ b/lib/param/param_table.c
@@ -4038,6 +4038,15 @@ struct parm_struct parm_table[] = {
 		.flags		= FLAG_ADVANCED,
 	},
 	{
+		.label		= "winbind request timeout",
+		.type		= P_INTEGER,
+		.p_class	= P_GLOBAL,
+		.offset		= GLOBAL_VAR(winbind_request_timeout),
+		.special	= NULL,
+		.enum_list	= NULL,
+		.flags		= FLAG_ADVANCED,
+	},
+	{
 		.label		= "winbind max clients",
 		.type		= P_INTEGER,
 		.p_class	= P_GLOBAL,
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index deaba21..13bd9b9 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -913,6 +913,7 @@ static void init_globals(bool reinit_globals)
 
 	Globals.winbind_cache_time = 300;	/* 5 minutes */
 	Globals.winbind_reconnect_delay = 30;	/* 30 seconds */
+	Globals.winbind_request_timeout = 60;   /* 60 seconds */
 	Globals.winbind_max_clients = 200;
 	Globals.winbind_enum_users = false;
 	Globals.winbind_enum_groups = false;
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
index a51a172..caa9ed1 100644
--- a/source3/winbindd/winbindd.c
+++ b/source3/winbindd/winbindd.c
@@ -1031,6 +1031,41 @@ static bool remove_idle_client(void)
 	return False;
 }
 
+/*
+ * Terminate all clients whose requests have taken longer than
+ * "winbind request timeout" seconds to process, or have been
+ * idle for more than "winbind request timeout" seconds.
+ */
+
+static void remove_timed_out_clients(void)
+{
+	struct winbindd_cli_state *state, *next = NULL;
+	time_t curr_time = time(NULL);
+	int timeout_val = lp_winbind_request_timeout();
+
+	for (state = winbindd_client_list(); state; state = next) {
+		time_t expiry_time;
+
+		next = state->next;
+		expiry_time = state->last_access + timeout_val;
+
+		if (curr_time > expiry_time) {
+			if (client_is_idle(state)) {
+				DEBUG(5,("Idle client timed out, "
+					"shutting down sock %d, pid %u\n",
+					state->sock,
+					(unsigned int)state->pid));
+			} else {
+				DEBUG(5,("Client request timed out, "
+					"shutting down sock %d, pid %u\n",
+					state->sock,
+					(unsigned int)state->pid));
+			}
+			remove_client(state);
+		}
+	}
+}
+
 struct winbindd_listen_state {
 	bool privileged;
 	int fd;
@@ -1056,6 +1091,7 @@ static void winbindd_listen_fde_handler(struct tevent_context *ev,
 			break;
 		}
 	}
+	remove_timed_out_clients();
 	new_connection(s->fd, s->privileged);
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list