From eeb24afd78a6448e808aaf96dbd7d5abf51bbd40 Mon Sep 17 00:00:00 2001 From: Pierre Carrier Date: Tue, 14 Sep 2010 16:43:39 -0700 Subject: [PATCH] Allows changing the maximum number of simultaneous clients in winbindd through an smb.conf option. Signed-off-by: Jeremy Allison --- docs-xml/smbdotconf/winbind/winbindmaxclients.xml | 14 ++++++++++++++ source3/include/local.h | 3 --- source3/include/proto.h | 1 + source3/param/loadparm.c | 13 ++++++++++++- source3/winbindd/winbindd.c | 8 +++----- 5 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 docs-xml/smbdotconf/winbind/winbindmaxclients.xml diff --git a/docs-xml/smbdotconf/winbind/winbindmaxclients.xml b/docs-xml/smbdotconf/winbind/winbindmaxclients.xml new file mode 100644 index 0000000..ae49e45 --- /dev/null +++ b/docs-xml/smbdotconf/winbind/winbindmaxclients.xml @@ -0,0 +1,14 @@ + + + This parameter specifies the maximum number of clients + the winbindd + 8 daemon can connect with. + + + +200 + diff --git a/source3/include/local.h b/source3/include/local.h index a3baf64..93ec4cc 100644 --- a/source3/include/local.h +++ b/source3/include/local.h @@ -239,9 +239,6 @@ /* Number in seconds for winbindd to wait for the mutex. Make this 2 * smbd wait time. */ #define WINBIND_SERVER_MUTEX_WAIT_TIME (( ((NUM_CLI_AUTH_CONNECT_RETRIES) * ((CLI_AUTH_TIMEOUT)/1000)) + 5)*2) -/* Max number of simultaneous winbindd socket connections. */ -#define WINBINDD_MAX_SIMULTANEOUS_CLIENTS 200 - /* Buffer size to use when printing backtraces */ #define BACKTRACE_STACK_SIZE 64 diff --git a/source3/include/proto.h b/source3/include/proto.h index f089c69..e1751e8 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -3539,6 +3539,7 @@ int lp_smb_encrypt(int ); char lp_magicchar(const struct share_params *p ); int lp_winbind_cache_time(void); int lp_winbind_reconnect_delay(void); +int lp_winbind_max_clients(void); const char **lp_winbind_nss_info(void); int lp_algorithmic_rid_base(void); int lp_name_cache_timeout(void); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index e3fc2d8..bb6e132 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -262,7 +262,7 @@ struct global { int oplock_break_wait_time; int winbind_cache_time; int winbind_reconnect_delay; - int winbind_max_idle_children; + int winbind_max_clients; char **szWinbindNssInfo; int iLockSpinTime; char *szLdapMachineSuffix; @@ -4606,6 +4606,15 @@ static struct parm_struct parm_table[] = { .flags = FLAG_ADVANCED, }, { + .label = "winbind max clients", + .type = P_INTEGER, + .p_class = P_GLOBAL, + .ptr = &Globals.winbind_max_clients, + .special = NULL, + .enum_list = NULL, + .flags = FLAG_ADVANCED, + }, + { .label = "winbind enum users", .type = P_BOOL, .p_class = P_GLOBAL, @@ -5299,6 +5308,7 @@ static void init_globals(bool reinit_globals) Globals.winbind_cache_time = 300; /* 5 minutes */ Globals.winbind_reconnect_delay = 30; /* 30 seconds */ + Globals.winbind_max_clients = 200; Globals.bWinbindEnumUsers = False; Globals.bWinbindEnumGroups = False; Globals.bWinbindUseDefaultDomain = False; @@ -5877,6 +5887,7 @@ FN_LOCAL_INTEGER(lp_smb_encrypt, ismb_encrypt) FN_LOCAL_CHAR(lp_magicchar, magic_char) FN_GLOBAL_INTEGER(lp_winbind_cache_time, &Globals.winbind_cache_time) FN_GLOBAL_INTEGER(lp_winbind_reconnect_delay, &Globals.winbind_reconnect_delay) +FN_GLOBAL_INTEGER(lp_winbind_max_clients, &Globals.winbind_max_clients) FN_GLOBAL_LIST(lp_winbind_nss_info, &Globals.szWinbindNssInfo) FN_GLOBAL_INTEGER(lp_algorithmic_rid_base, &Globals.AlgorithmicRidBase) FN_GLOBAL_INTEGER(lp_name_cache_timeout, &Globals.name_cache_timeout) diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index 7a9ebb8..9c0a1fb 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -908,17 +908,15 @@ static void winbindd_listen_fde_handler(struct tevent_context *ev, struct winbindd_listen_state *s = talloc_get_type_abort(private_data, struct winbindd_listen_state); - while (winbindd_num_clients() > - WINBINDD_MAX_SIMULTANEOUS_CLIENTS - 1) { + while (winbindd_num_clients() > lp_winbind_max_clients() - 1) { DEBUG(5,("winbindd: Exceeding %d client " "connections, removing idle " - "connection.\n", - WINBINDD_MAX_SIMULTANEOUS_CLIENTS)); + "connection.\n", lp_winbind_max_clients())); if (!remove_idle_client()) { DEBUG(0,("winbindd: Exceeding %d " "client connections, no idle " "connection found\n", - WINBINDD_MAX_SIMULTANEOUS_CLIENTS)); + lp_winbind_max_clients())); break; } } -- 1.7.0.4